home *** CD-ROM | disk | FTP | other *** search
- /*
- screen.c
-
- スクリーンビットマップオブジェクト実現部
-
- SCRBITMAP scrbitmap_new(int wid, int ht);
- void scrbitmap_delete(SCRBITMAP bm);
- void scrbitmap_draw(SCRBITMAP bm, int x,int y);
-
- void scrbitmap_setpixel(SCRBITMAP bm, int x,int y, int r,int g,int b);
- void scrbitmap_clear(SCRBITMAP bm);
-
- */
- #define MODULE_SCREEN
-
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
- #include <winb.h>
- #include <te.h>
- #include <fntb.h>
- #include <gui.h>
- #include <fmcfrb.h>
- #include <file_dlg.h>
- #include <egb.h>
- #include <wgb.h>
- #include <msdos.cf>
-
- #include "art.h"
- #include "wgbmac.h"
- #include "screen.h"
-
- #include "pic.h" // RGBコーディングマクロを使うため
-
- SCRBITMAP scrbitmap_new(int wid, int ht)
- {
- SCRBITMAP bm;
- bm = TL_calloc(1,sizeof(SCRBITMAP_DATA));
- if (bm == NULL)
- return NULL;
- bm->wid = wid;
- bm->ht = ht;
- bm->pixelsize = scrPixelSize;
- if ((bm->buf = TL_calloc(1,bm->pixelsize*wid*ht/8)) == NULL)
- {
- TL_free(bm);
- return NULL;
- }
- return bm;
- }
-
- void scrbitmap_delete(SCRBITMAP bm)
- {
- TL_free(bm->buf);
- TL_free(bm);
- }
-
- void scrbitmap_draw(SCRBITMAP bm, int x,int y)
- {
- WGB_PUTBLOCK(guiEgbPtr, bm->buf, x,y, bm->wid, bm->ht);
- }
-
- void scrbitmap_drawPart(SCRBITMAP bm, FRAME* frDraw, int ofsx,int ofsy)
- // frDraw:SCRBITMAP 内座標(x,y,wid,ht)
- // ofsx,ofsy:SCRBITMAPの原点の画面上での座標
- {
- char *tempBuf;
- tempBuf = TL_calloc(1,frDraw->WID*frDraw->HT*bm->pixelsize/8);
- if (tempBuf == NULL)
- return;
- int i;
- for (i=0; i<frDraw->HT; i++)
- {
- if (frDraw->Y + i >= bm->ht)
- break;
- char *destptr;
- char *srcptr;
- destptr = tempBuf + (frDraw->WID*i) * bm->pixelsize / 8;
- srcptr = bm->buf+(bm->wid*(frDraw->Y+i)+frDraw->X) * bm->pixelsize / 8;
- int size = _min(frDraw->WID, bm->wid-frDraw->X) * bm->pixelsize / 8;
- memcpy(destptr, srcptr, size);
- }
- WGB_PUTBLOCK(guiEgbPtr, tempBuf,
- ofsx+frDraw->X, ofsy+frDraw->Y, frDraw->WID,frDraw->HT);
- TL_free(tempBuf);
- }
-
- void scrbitmap_setpixel(SCRBITMAP bm, int x,int y, int r,int g,int b)
- {
- if (bm==NULL || bm->buf == NULL)
- return;
- if (x < 0 || bm->wid <= x || y < 0 || bm->ht <= y)
- return;
- char *dp = bm->buf + BMOFFSET(bm,x,y);
- if (bm->pixelsize == 16)
- SETRGB31(WORD(dp), r>>3,g>>3,b>>3);
- else
- dp[0]=r,dp[1]=g,dp[2]=b;
- }
-
- void scrbitmap_clear(SCRBITMAP bm)
- {
- if (bm==NULL)
- return;
- memset(bm->buf,0xff,bm->wid*bm->ht*bm->pixelsize/8);
- }
-